核思想(kernel trick)

核的定义

根据李航的统计学习,对核有如下的定义:

为输入空间,为特征空间(希尔伯特空间),如果存在一个从的映射:

使得对所有的函数满足条件

则称为核函数,为映射函数。

看完了定义,一地鸡毛。核定义看不懂,有什么用不知道,核函数是什么函数不知道,映射函数的表达是是什么也不知道。

其实核的概念理解需要泛函的知识,有点难,我们机器学习只要知道怎么用,核能干什么就可以了。

核的作用

机器学习引入核的概念是为了处理非线性数据的。正常我们的及其学习算法大多数都是在线性场景下有好的效果,对于非线性场景,效果较差,那么自然我们就想到将非线性通过一定的映射变为线性的就好了,核就可以实现这样的功能。

我们看核的定义,映射函数将输出空间的非线性数据映射到希尔伯特空间(这个概念很难,我们只要知道就好,这个空间是无穷维的,且是完备的)变为线性的。也就是我们将低维的非线性数据映射为高维的线性数据,使其线性可分。

那么这个映射函数要怎样设计呢?很抱歉,我们不需要知道映射函数的具体表达式,我们只要知道核函数的表达式就好了。核函数是映射函数的内积,因此只要我们的原空间的分类器有内积运算,那么我们将其映射到高维空间后,只需要用核函数替换掉映射函数的内积就可以了,简单,高效。

下面我们直观看下为什么核能够将低维的非线性数据映射为高维的线性数据

核的直观显示:

下面我们给出核的一个直观显示,如下图是一张图像(来自知乎https://www.zhihu.com/question/24627666),我们无法设计一个线性的分类器将红色部分和黑色部分分开。

kernel1

但是当我们利用一个简单的内积平方和函数,就可以将其映射到3维上,将其变为线性可分的了。

kernel2

我们找一个更加具体的例子看一下(http://cn-static.udacity.com/mlnd/videos/Kernel.mp4)

当给定下面四个点时,我们用一个线性分类器是无法将其分类的。

kernel3

那么有两种方式解决这个问题,一个是用非线性分类器(图中的曲线解决)

另一种就是如果我们能将二维空间扩展到3维,将两个绿点提升到另一个平面上,那么我们就可以用一个平面来分类两类点了。这就是核的思想。通过映射到高维变为线性可分。

那么具体怎么做呢?

我们看下图中的三个点,当我们引入内积时,能够将问题完美解决。

kernel4

那么内积到底做了什么事情呢,下图就给了我们一个完美的答案,引入核相当于多引入的一个维度,能够将二者分开。相当于在前两个维度两组数据是一样的,第三维度两组数据不一致,因此可以在高维将其分开。

kernel5

常用的核函数

核函数的设计也是一个很艰难的问题,目前看,我们常用的核有下面的几种

多项式核

高斯核

核的应用

核函数一般应用于扩展分类器到非线性数据集上,比如SVM和KPCA等算法,后续会重点讲这两个算法,看下核在这里面的应用。

附加知识:

几个空间

欧氏空间:欧氏空间就是我们所在的空间,一般来说定义了距离度量的就是欧氏空间

赋范空间:距离+线性结构+范数

希尔伯特空间:赋范+内积+完备性

为什么核可以将数据映射到无限维度

我们已高斯核为例子,将高斯核泰勒展开:

也就是说核函数可以分解为无穷维度的内积的计算。

显示 Gitment 评论